#pragma once
#include <iostream>
#include <string>

// 条件编译

class test06_Oop
{
public:
	void classMain();


	/////////////////////////////////////////
	// 内部类要写入.h文件中
// 基类Personal
class Personal
{
public:
	// 字段注释
	std::string name;
	float age;
	int a;
	int perFar;
	typedef struct perF {
		int f;
	};

	// 在方法声明时实现
	void saidWord(){
		std::cout << "Personal=实现在类内部\n";
	}

	void saidBay();
	void l2();

	// 内联函数
	inline void l1() {
		std::cout << "内联函数：l1\n";
	}

	// 继承关系中的虚函数
	// 编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数，所以被成为“虚”函数
	virtual void show(void) {
		std::cout << "Personal=虚函数，实现在.h中，类内部\n";
	}

	// 定义一个可在子类中重写的函数
	virtual void myOverride() {
		std::cout << "myOverride的默认实现\n";
	};
	// 定义一个纯虚函数 = 所有子类必须要重写
	//virtual void myShow(void) = 0;
};


// :: 是域运算符，在类中声明方法，但未实现，在类外实现时用::指明是那个类的方法
void saidBay(){
	std::cout << "Personal=实现在.h中，内外部\n";
}

// 内联函数实现在类外部，但要在类中声明 = 编译报错？？？？
inline void l2() {
	std::cout << "Personal=内联函数：l2\n";
}


// 子类PerA 以public的方式继承 Personal
class PerA : public Personal
{
public:
	int perAParticularAttribute = 021;

	void saidSelfName(){
		std::cout << "perAParticularAttribute：" << perAParticularAttribute << std::endl;
		perFar = 10;
		perF f = { 1 };
	}

	virtual void show(void) {
		std::cout << "PerA=虚函数，实现在子类中\n";
	}

	// 重写父类函数
	void myOverride() override { // override用在要重写的方法后
		std::cout << "子类重写实现myOverride\n";
	}

	// 纯虚函数
	//virtual void myShow(void) {
	//	std::cout << "";
	//}

	

};







};
